/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mwt.xml.xdbforms.xformlayer;

import java.io.OutputStream;
import java.util.Collection;
import java.util.Map;
import mwt.xml.xdbforms.schemalayer.SchemaDocument;
import mwt.xml.xdbforms.xformlayer.exception.XFormDocumentException;
import org.w3c.dom.Document;

/**
 *  Definisce un'interfaccia per la costruzione di un documento
 *  xform
 * @author Gianfranco Murador, Matteo Ferri, Cristian Castiglia
 */
public interface XFormDocument {


    /**
     * Costruisce il modello dati derivato dallo
     * XML Schema associato. Questo verrà usato come
     * documento di partenza per la trasformazione
     * @throws mwt.xml.xdbforms.xformlayer.exception.XFormDocumentException
     */

    public void buildDataModel(SchemaDocument sd,String schemaURL) throws XFormDocumentException;



    /**
     * Costruisce il modello dati con i valori passati in input
     * @param sd
     * @param values
     * @throws mwt.xml.xdbforms.xformlayer.exception.XFormDocumentException
     */
    public void buildDataModel(SchemaDocument sd,String schemaURL ,Collection values)
            throws XFormDocumentException;



    /**
     * Costruisce il file per intero compreso di presentazione.
     * NOTA: <i> Viene usato una trasformazione xslt per dare maggiore
     * manutenibilità ed efficienza al codice </i>
     *
     * @param parameters parametri passati come coppia valore la trasformazione
     * @param os stream di output con il file trasformato
     * @throws mwt.xml.xdbforms.xformlayer.exception.XFormDocumentException
     */
    public void buildPresentation(Map<String,String> parameters, OutputStream os)
            throws XFormDocumentException;



    /**
     * Ritorna il modello dati se è stato costruito,
     * altrimenti solleva un'eccezione
     * @throws mwt.xml.xdbforms.xformlayer.exception.XFormDocumentException
     */
    public Document getDataModel() throws XFormDocumentException;


    /**
     * Ritorna il modello dei valori ammissibili per campi
     * con controllo select o select1 se sono presenti,
     * altrimenti ritorna null.
     * In caso di problemi nella costruzione, solleva un'eccezione.
     * @return un oggetto di tipo Document
     * @throws mwt.xml.xdbforms.xformlayer.exception.XFormDocumentException
     */
    public Document getValueModel() throws XFormDocumentException;
   


}
